package com.ccp.dev.workflow.dao;

import com.ccp.dev.core.basic.base.IBaseMapper;
import com.ccp.dev.workflow.model.ActDefModel;

import java.util.List;
import java.util.Map;

/**
 * ClassDescribe:流程定义模型Dao
 *
 * @author :jiayueqiao
 * Date: 2019-05-15
 * Since:1
 * To change this template use File | Settings | File Templates.
 */
public interface ActDefModelDao extends IBaseMapper<ActDefModel, String> {

    /**
     * 保存模型的参数设置
     *
     * @param model 模型对象
     * @return 影响结果数
     */
    int saveParam(ActDefModel model);

    /**
     * 根据模型key查询数据,主版本
     *
     * @param modelKey 模型key
     * @return 模型对象
     */
    ActDefModel getByModelKey(String modelKey);

    /**
     * 更改模型的分类
     *
     * @param params 参数
     */
    void updateModelType(Map<String, Object> params);

    /**
     * 获取模型的历史版本
     *
     * @param map
     * @return
     */
    List<ActDefModel> queryModelByParentModelId(Map map);

    /**
     * 按Activiti的流程定义Key获取ActDefModel实体
     * @param procDefKey
     * @return
     */
    List<ActDefModel> queryAllByProcDefKey(String procDefKey);

    /**
     * 删除流程定义数据表ACT_GE_BYTEARRAY，ACT_RE_DEPLOYMENT，ACT_RE_PROCDEF
     * @param procDefId
     */
    void delActRuTaskDeployId(String procDefId);

    /**
     * 删除Act_Ru_Execution的约束表Act_Ru_IdentityLink
     * @param procDefId
     */
    void delActRuIdentityLink(String procDefId);
    /**
     * 删除Act_Ru_Execution的约束表Act_Ru_Variable
     * @param procDefId
     */
    void delActRuVariable(String procDefId);
    /**
     * 删除Act_Ru_Execution的约束表Act_Ru_Task
     * @param procDefId
     */
    void delActRuTask(String procDefId);

    /**
     * 删除执行流
     * @param procDefId
     */
    void delActRuExecution(String procDefId);

    /**
     * 根据执行流id删除执行流
     * @param id
     */
    void delActRuExecutionById(String id);

    /**
     * 删除流程定义数据表ACT_GE_BYTEARRAY，ACT_RE_DEPLOYMENT，ACT_RE_PROCDEF
     * @param deployId
     */
    void delProcDefByDeployId(String deployId);


    /**
     * 发布新版时，将其他版本设置为非主版本
     * @param params 模型key、主版本id
     */
    void updateSubVersions(Map<String, Object> params);

    /**
     * 发布新版时，将其他版本设置为非主版本
     * @param modelKey 模型key
     */
    ActDefModel getMainByModelKey(String modelKey);

    /**
     * 根据流程定义id获取定义模型实体
     * @param procDefId 流程定义id
     * @return 模型实体
     */
    ActDefModel getByProcDefId(String procDefId);

    /**
     * 通过createBy获取所有自己创建的流程定义key
     * @param userId 用户id
     * @return 流程定义key列表
     */
    List<String> queryModelKeyByCreateBy(String userId);


    /**
     * 根据条件查询定义的流程
     * @param map
     * @return
     */
    List<ActDefModel> queryAuthorizedList(Map<String,Object> map);

    /**
     * 按Key取得主版本的流程定义
     *
     * @param procDefKey
     * @return
     */
    ActDefModel getByProcDefKeyIsMain(String procDefKey);

    ActDefModel getXmlByProcDefKey(String procDefKey);

    ActDefModel getByDeployId(String deployId);
}
